
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>

#include <sys/ioctl.h>
#include <sys/socket.h>

#include <net/if.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <pthread.h>

#define PORT 50021

int recvfd;

// 收UDP数据
void *recvUDP(void *arg)
{
    struct sockaddr_in addr = {0};
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = htonl(INADDR_ANY); // 任意取一个开发板的IP
    addr.sin_port = htons(PORT); // 接收数据端口

    // 绑定上述地址，即从指定的网口接收数据
    if(bind(recvfd, (struct sockaddr *)&addr, sizeof(addr)) != 0)
        perror("绑定地址失败");

    char buf[100];
    while(1)
    {
        bzero(buf, 100);

        // 等待UDP数据
        int n = recvfrom(recvfd, buf, 100, 0, NULL, NULL);
        printf("%s\n", buf);
    }

}

int main(int argc, char const *argv[])
{
    // 创建两个UDP套接字
    recvfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if(recvfd == -1)
    {
        perror("创建套接字失败");
        exit(0);
    }

    // 创建两条线程，一条负责收数据，一条负责发数据
    pthread_t t1;
    pthread_create(&t1, NULL, recvUDP, NULL);

    pthread_exit(NULL);
}